/*
 * @Author: pengtianrui 2276608413@qq.com
 * @Date: 2024-07-24 19:37:46
 * @LastEditors: Wang Shuo wangshuo@sgsimulation.com
 * @LastEditTime: 2024-08-30 11:09:44
 * @FilePath: \SGFEM\DataStructure\FEM\Element\include\CPENTAData.h
 * @Description: 定义具有 6 到 15 个栅格点的三棱柱实体单元
 * CPENTA
 */

#pragma once
#include "DataStructure/Common/DataStructureNamespace.h"
#include "DataStructure/Common/Id.h"
#include "DataStructure/Input/Element/ElementBase.h"

SG_DATASTRUCTURE_FEM_NAMESPACE_OPEN
/** @brief 三棱柱单元数据
 *
 * 可用于储存 低阶和高阶（带边中点）单元
 */
struct DECLSPEC CPENTAData : public ElementBase
{
    SG::DataStructure::Common::Id m_pId      = 0;      ///< property's id
    SG::DataStructure::Common::Id m_g[15]    = { 0 };  ///< nodes' id
    SG::DataStructure::Common::Id m_domainId = 0;
    
  protected:
    CPENTAData () = default;
    // 友元声明
    DB_CREATE_FRIEND ()
};

DECLSPEC bool operator== (const CPENTAData& a, const CPENTAData& b);

struct DECLSPEC CPENTA6Data : public CPENTAData
{};
struct DECLSPEC CPENTA15Data : public CPENTAData
{};

SG_DATASTRUCTURE_FEM_NAMESPACE_CLOSE